﻿// <copyright file="IModPreferences.cs" company="SingularityShift">
// Copyright (c) 2009 SingularityShift.com
// </copyright>
// <author>Ben McClure</author>
// <email>ben@singularityshift.com</email>
// <date>2009-08-14</date>
// <summary>A public interface which defines an object that contains preferences about a game mod.</summary>
namespace GameLib.Games
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// <para>Defines preferences regarding an IMod that should be stored separately from the IMod.</para>
    /// <para>These preferences can both override and extend the information already contained or loaded in the IMod.</para>
    /// </summary>
    public interface IModPreferences
    {
        /// <summary>
        /// Gets or sets an integer rating (usually between 0 and 5) for the mod.
        /// </summary>
        int Rating
        {
            get;
            set;
        }

        /// <summary>
        /// Gets a list of conflict patterns to ignore when being checked against this mod.
        /// </summary>
        IList<string> IgnoredConflictPatterns
        {
            get;
        }

        /// <summary>
        /// Gets a list of dependency patterns to ignore when being checked against this mod.
        /// </summary>
        IList<string> IgnoredDependencyPatterns
        {
            get;
        }

        /// <summary>
        /// Gets a list of message patterns to ignore when being checked against this mod.
        /// </summary>
        IList<string> IgnoredMessagePatterns
        {
            get;
        }

        /// <summary>
        /// Gets an object containing ordering information about this mod.
        /// </summary>
        IModOrderingInformation OrderingInformation
        {
            get;
        }

        /// <summary>
        /// Loads the mod preferences (although the location to load them form is undefined here)
        /// </summary>
        void Load();

        /// <summary>
        /// Saves the mod preferences (although the location to save them to is undefined here)
        /// </summary>
        void Save();
    }
}
